package com.zretc.aop.log;

import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/**
 * 3-> 自定义切面(通用的功能，这个功能可能给sendMessage, Userservice。。。。。。) 使用注解@Aspect来表示
 * 
 * @Component 表示这个类是一个bean,用来代替 <bean id class....>
 * 
 * @author Administrator
 *
 */
@Component
@Aspect
public class LogAop {

	FileWriter fw = null;

	public LogAop() {
		try {
			fw = new FileWriter("d:\\log.txt", true);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * 切面before,前置通知(什么时候执行)的方法;指定了通知类型，和切入点的语法
	 * 
	 * @throws IOException
	 */
	@Before(value = "testMethod()")
	public void before() throws IOException {
		System.out.println("执行之前的输出: " + new Date());
		fw.write("执行之前的输出: " + new Date()+"\r\n");
		fw.flush();
	}

	/**
	 * 切面after,后置通知(什么时候执行)的方法
	 * 
	 * @throws IOException
	 */
	@After(value = "testMethod()")
	public void after() throws IOException {
		System.out.println("执行之后的输出: " + new Date());
		fw.write("执行之后的输出: " + new Date()+"\r\n");
		fw.flush();
		
		fw.close();
	}

	@Pointcut(value = "execution (* com.zretc.service.*.*(..))")
	public void testMethod() {

	}
}
